Imports System.Data.SqlClient

Public Class cls_mensajeromensaje_

    Implements ICloneable

#Region "Variables ..."
    Private int_idmensajeromensaje As Integer = 0
    Private int_idusuarioenvia As Integer = 0
    Private int_idusuariorecibe As Integer = 0
    Private dte_fechaenvia As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private dte_fecharecibe As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private str_mensaje As String = ""
    Private bit_pendiente As Boolean = False

    Private obj_usuarioenvia As cls_usuario_ = Nothing
    Private obj_usuariorecibe As cls_usuario_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_mensajeromensaje_) = Nothing
#End Region

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idmensajeromensaje
        End Get
    End Property
    Property idmensajeromensaje() As Integer
        Get
            idmensajeromensaje = int_idmensajeromensaje
        End Get
        Set(ByVal value As Integer)
            int_idmensajeromensaje = value
        End Set
    End Property
    Property idusuarioenvia() As Integer
        Get
            idusuarioenvia = int_idusuarioenvia
        End Get
        Set(ByVal value As Integer)
            int_idusuarioenvia = value
        End Set
    End Property
    Property idusuariorecibe() As Integer
        Get
            idusuariorecibe = int_idusuariorecibe
        End Get
        Set(ByVal value As Integer)
            int_idusuariorecibe = value
        End Set
    End Property
    Property fechaenvia() As DateTime
        Get
            fechaenvia = dte_fechaenvia
        End Get
        Set(ByVal value As DateTime)
            dte_fechaenvia = value
        End Set
    End Property
    Property fecharecibe() As DateTime
        Get
            fecharecibe = dte_fecharecibe
        End Get
        Set(ByVal value As DateTime)
            dte_fecharecibe = value
        End Set
    End Property
    Property mensaje() As String
        Get
            mensaje = str_mensaje
        End Get
        Set(ByVal value As String)
            str_mensaje = value
        End Set
    End Property
    Property pendiente() As Boolean
        Get
            pendiente = bit_pendiente
        End Get
        Set(ByVal value As Boolean)
            bit_pendiente = value
        End Set
    End Property

    Property usuarioenvia As cls_usuario_
        Get
            If IsNothing(obj_usuarioenvia) Then
                obj_usuarioenvia = New cls_usuario_
                If Not obj_usuarioenvia.Buscar(idusuarioenvia) Then
                    obj_usuarioenvia = Nothing
                End If
            End If
            usuarioenvia = obj_usuarioenvia
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuarioenvia = value
        End Set
    End Property
    Property usuariorecibe As cls_usuario_
        Get
            If IsNothing(obj_usuariorecibe) Then
                obj_usuariorecibe = New cls_usuario_
                If Not obj_usuariorecibe.Buscar(idusuariorecibe) Then
                    obj_usuariorecibe = Nothing
                End If
            End If
            usuariorecibe = obj_usuariorecibe
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuariorecibe = value
        End Set
    End Property

    Property Items() As Collections.Generic.List(Of cls_mensajeromensaje_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_mensajeromensaje_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_mensajeromensaje_)
        While obj_Reader.Read()
            Dim Elemento As New cls_mensajeromensaje_
            Elemento.int_idmensajeromensaje = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idmensajeromensaje")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioenvia"))) = False Then
                Elemento.int_idusuarioenvia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioenvia")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariorecibe"))) = False Then
                Elemento.int_idusuariorecibe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariorecibe")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechaenvia"))) = False Then
                Elemento.dte_fechaenvia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechaenvia")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibe"))) = False Then
                Elemento.dte_fecharecibe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibe")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("mensaje"))) = False Then
                Elemento.str_mensaje = (obj_Reader.GetValue(obj_Reader.GetOrdinal("mensaje")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente"))) = False Then
                Elemento.bit_pendiente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idmensajeromensaje = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idmensajeromensaje")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioenvia"))) = False Then
            int_idusuarioenvia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioenvia")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariorecibe"))) = False Then
            int_idusuariorecibe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariorecibe")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechaenvia"))) = False Then
            dte_fechaenvia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechaenvia")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibe"))) = False Then
            dte_fecharecibe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibe")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("mensaje"))) = False Then
            str_mensaje = (obj_Reader.GetValue(obj_Reader.GetOrdinal("mensaje")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente"))) = False Then
            bit_pendiente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Nuevo = False
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__Nuevo"
                .Parameters.Add("@idusuarioenvia", SqlDbType.Int).Value = int_idusuarioenvia
                .Parameters.Add("@idusuariorecibe", SqlDbType.Int).Value = int_idusuariorecibe
                .Parameters.Add("@fechaenvia", SqlDbType.DateTime).Value = dte_fechaenvia
                .Parameters.Add("@fecharecibe", SqlDbType.DateTime).Value = dte_fecharecibe
                .Parameters.Add("@mensaje", SqlDbType.NVarChar).Value = str_mensaje
                .Parameters.Add("@pendiente", SqlDbType.Bit).Value = bit_pendiente
                .ExecuteNonQuery()
            End With
            If ObtenerID Then
                CargarUltimo()
            End If
            Nuevo = True
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__Modificar"
                .Parameters.Add("@idmensajeromensaje", SqlDbType.Int).Value = int_idmensajeromensaje
                .Parameters.Add("@idusuarioenvia", SqlDbType.Int).Value = int_idusuarioenvia
                .Parameters.Add("@idusuariorecibe", SqlDbType.Int).Value = int_idusuariorecibe
                .Parameters.Add("@fechaenvia", SqlDbType.DateTime).Value = dte_fechaenvia
                .Parameters.Add("@fecharecibe", SqlDbType.DateTime).Value = dte_fecharecibe
                .Parameters.Add("@mensaje", SqlDbType.NVarChar).Value = str_mensaje
                .Parameters.Add("@pendiente", SqlDbType.Bit).Value = bit_pendiente
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idmensajeromensaje As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__Eliminar"
                .Parameters.Add("@idmensajeromensaje", SqlDbType.Int).Value = idmensajeromensaje
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idmensajeromensaje As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__Buscar"
                .Parameters.Add("@idmensajeromensaje", SqlDbType.Int).Value = idmensajeromensaje
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarXidusuariorecibeXidusuarioenviaPENDIENTES(ByVal prm_idusuariorecibe As Integer, ByVal prm_idusuarioenvia As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidusuariorecibeXidusuarioenviaPENDIENTES = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__CargarXidusuariorecibeXidusuarioenviaPENDIENTES"
                .Parameters.Add("@idusuariorecibe", SqlDbType.Int).Value = prm_idusuariorecibe
                .Parameters.Add("@idusuarioenvia", SqlDbType.Int).Value = prm_idusuarioenvia
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidusuariorecibeXidusuarioenviaPENDIENTES = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarXidusuariorecibeXidusuarioenviaPENDIENTES los registros de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarXidusuariorecibePENDIENTES(ByVal prm_idusuariorecibe As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidusuariorecibePENDIENTES = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "mensajeromensaje__CargarXidusuariorecibePENDIENTES"
                .Parameters.Add("@idusuariorecibe", SqlDbType.Int).Value = prm_idusuariorecibe
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidusuariorecibePENDIENTES = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarXidusuariorecibePENDIENTES los registros de mensajeromensaje_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_mensajeromensaje_Clon As New cls_mensajeromensaje_
        obj_mensajeromensaje_Clon.int_idmensajeromensaje = Me.int_idmensajeromensaje
        obj_mensajeromensaje_Clon.int_idusuarioenvia = Me.int_idusuarioenvia
        obj_mensajeromensaje_Clon.int_idusuariorecibe = Me.int_idusuariorecibe
        obj_mensajeromensaje_Clon.dte_fechaenvia = Me.dte_fechaenvia
        obj_mensajeromensaje_Clon.dte_fecharecibe = Me.dte_fecharecibe
        obj_mensajeromensaje_Clon.str_mensaje = Me.str_mensaje
        obj_mensajeromensaje_Clon.bit_pendiente = Me.bit_pendiente
        obj_mensajeromensaje_Clon.col_Items = Me.col_Items
        Return obj_mensajeromensaje_Clon
    End Function

End Class
